<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="maximum-scale=1.0,minimum-scale=1.0,user-scalable=0,width=device-width,initial-scale=1.0"
    />
    <title>策略模式</title>
</head>

<body>
    <h2>俗话说，条条大路通罗马。</h2>
    <p>在美剧《越狱》中，主角 Michael Scofield 就设计了两条越狱的 道路。这两条道路都可以到达靠近监狱外墙的医务室。</p>
    <p>同样，在现实中，很多时候也有多种途径到达同一个目的地。比如我们要去某个地方旅游， 可以根据具体的实际情况来选择出行的线路。</p>
    <p>如果没有时间但是不在乎钱，可以选择坐飞机。  如果没有钱，可以选择坐大巴或者火车。  如果再穷一点，可以选择骑自行车。</p>
    <p>在程序设计中，我们也常常遇到类似的情况，要实现某一个功能有多种方案可以选择。比如 一个压缩文件的程序，既可以选择 zip算法，也可以选择 gzip算法。 这些算法灵活多样，而且可以随意互相替换。这种解决方案就是本章将要介绍的策略模式。</p>
    <strong>策略模式的定义是：定义一系列的算法，把它们一个个封装起来，并且使它们可以相互替换。</strong>

    <p> calculateBonus 的函数来计算每个人的奖金数额。</p>
    <p>很显然， calculateBonus 函数要正确工作，就需要接收两个参数：员工的工资数额和他的绩效考核等级。</p>
    <script type="text/javascript">
        var calculateBonus = function (performanceLevel, salary) {
            if (performanceLevel === 'S') {
                return salary * 4
            } else if (performanceLevel === 'A') {
                return salary * 3
            } else if (performanceLevel === 'B') {
                return salary * 2
            }
        }
        var money1 = calculateBonus('B', 20000)
        var money2 = calculateBonus('S', 6000)
        console.log(money1)
        console.log(money2)
    </script>

</body>

</html>